// 这里定义和登录相关的路由
const express = require('express')
const md5 = require('md5')
const tokenManger = require('../utils/tokenM')
const router = express.Router()

const adminModel = require('../db/models/admin')

// 登录的接口
router.post('/login', async (req, res) => {
  // 获取用户上传的 用户名和密码
  const { username, password } = req.fields

  // 去数据库中查找,是否有这个用户
  const user = await adminModel.findOne({ username, password: md5(password) })
  // 如果有表示登录成功
  if (user) {
    // 创建token
    const token = tokenManger.encode({ id: user._id })
    // 将当前登录用户的token存储起来(实际上就是修改当前用户的token属性的值)
    await adminModel.updateOne({ _id: user._id }, { $set: { token } })
    // 响应浏览器
    res.send({ code: 2, message: '登录成功', data: token, status: true })
  } else {
    // 登录失败
    res.send({ code: 1, message: '账号或密码错误', data: null, status: false })
  }
})

// 校验token
router.get('/verifyToken', async (req, res) => {
  // 获取token(token是通过请求头传递给服务器的)
  const token = req.get('token')
  if (token) {
    // 先去数据库中查找是否有这个token
    const user = await adminModel.findOne({ token })
    if (user) {
      // 如果能够通过token查找到用户信息,说明token是正确的.但是还要判断token是否过期
      const result = tokenManger.decode(token)
      if (Date.now() < result.expires) {
        // 没过期
        res.send({
          code: 2,
          message: '校验通过',
          data: null,
          status: true,
        })
      } else {
        // 过期了
        res.send({
          code: 3,
          message: '您的登录过期了,请重新登录',
          data: null,
          status: false,
        })
      }
    } else {
      // 没有传递token,则让用户先去登录
      res.send({
        code: 1,
        message: '您没有登录,请先登录',
        data: null,
        status: false,
      })
    }
  } else {
    // 没有传递token,则让用户先去登录
    res.send({
      code: 1,
      message: '您没有登录,请先登录',
      data: null,
      status: false,
    })
  }
})

// 退出登录的接口

router.get('/logout', async (req, res) => {
  const token = req.get('token')
  await adminModel.updateOne({ token }, { $set: { token: '' } })
  res.send({
    code: 2,
    message: '退出登录成功',
    data: null,
    status: true,
  })
})

module.exports = router
